<?php defined('LFNC_PACKAGE') or die('forbidden');


/**
* MLT Web Engine
* http://www.molotsoft.ru
*
* @package MLT_WE
* @subpackage Lucky_Funcs
* @author Ivan Chistyakov <ivan@molotsoft.ru>
* @version $Id: variable.lfnc.php 295 2009-08-02 04:27:45Z molotsoft@gmail.com $
* @link $HeadURL: http://lucky-funcs.googlecode.com/svn/branches/version_1/funcs/variable.lfnc.php $
*/


function swap(&$var1, &$var2) {
	$buffer = $var1; $var1 = $var2; $var2 = $buffer;
}


function boolval($var) {
	return (bool)$var;
}

function intboolval($var) {
	return (int)(bool)$var;
}

function is_intbool($var) {
	return is_int($var) && ($var >= 0) && ($var <= 1);
}

function is_wnumbool($var) {
	return is_wholenum($var) && ((int)$var >= 0) && ((int)$var <= 1);
}


function is_true($var) {
	return is_bool($var) && $var;
}

function is_false($var) {
	return is_bool($var) && !$var;
}


function is_wholenum($var) {
	return is_numeric($var) && (floor($var) === ceil($var));
}

function is_wnum($var) { // alias of is_wholenum()
	return is_wholenum($var);
}

function is_num($var) { // alias of is_numeric()
	return is_numeric($var);
}


function uintval($var) {
	return (int)max(0, $var);
}

function ufloatval($var) {
	return (float)max(0, $var);
}

function is_uint($var) {
	return is_int($var) && ($var >= 0);
}

function is_uwholenum($var) {
	return is_wholenum($var) && ((int)$var >= 0);
}

function is_uwnum($var) { // alias of is_uwholenum()
	return is_uwholenum($var);
}

function is_ufloat($var) {
	return is_float($var) && ($var >= 0.0);
}

function is_unumeric($var) {
	return is_numeric($var) && ((float)$var >= 0.0);
}

function is_unum($var) { // alias of is_unumeric()
	return is_unumeric($var);
}


function is_object_class_name($var, $class_name) {
	return is_object($var) && strcaseeq(get_class($var), trim($class_name));
}

function is_resource_type($var, $resource_type) {
	return is_resource($var) && strcaseeq(get_resource_type($var), trim($resource_type));
}


function is_empty($var) {
	return empty($var);
}


function equtype($var1, $var2 /* [, $var3 [, $... ]] */ ) {
	//return gettype($var1) === gettype($var2);
	$args = func_get_args();
	return array_equal(array_map('gettype', $args));
}


function lt($var1, $var2) {
	return $var1 < $var2;
}

function eq($var1, $var2) {
	return $var1 == $var2;
}

function gt($var1, $var2) {
	return $var1 > $var2;
}

function lteq($var1, $var2) {
	return $var1 <= $var2;
}

function gteq($var1, $var2) {
	return $var1 >= $var2;
}


function lss($var1, $var2) {
	return $var1 < $var2;
}

function equ($var1, $var2) {
	return $var1 == $var2;
}

function gtr($var1, $var2) {
	return $var1 > $var2;
}

function lssequ($var1, $var2) {
	return $var1 <= $var2;
}

function gtrequ($var1, $var2) {
	return $var1 >= $var2;
}


function lt_type($var1, $var2) {
	return equtype($var1, $var2) && lt($var1, $var2);
}

function eq_type($var1, $var2) {
	return equtype($var1, $var2) && eq($var1, $var2);
}

function gt_type($var1, $var2) {
	return equtype($var1, $var2) && gt($var1, $var2);
}

function lteq_type($var1, $var2) {
	return equtype($var1, $var2) && lteq($var1, $var2);
}

function gteq_type($var1, $var2) {
	return equtype($var1, $var2) && gteq($var1, $var2);
}


function lss_type($var1, $var2) {
	return equtype($var1, $var2) && lss($var1, $var2);
}

function equ_type($var1, $var2) {
	return equtype($var1, $var2) && equ($var1, $var2);
}

function gtr_type($var1, $var2) {
	return equtype($var1, $var2) && gtr($var1, $var2);
}

function lssequ_type($var1, $var2) {
	return equtype($var1, $var2) && lssequ($var1, $var2);
}

function gtrequ_type($var1, $var2) {
	return equtype($var1, $var2) && gtrequ($var1, $var2);
}


function min_max($min, $var, $max) {
	return max($min, min($var, $max));
}

function in_range_old($min, $var, $max) {
	return settype($min, gettype($var)) && settype($max, gettype($var)) && ($min <= $var) && ($var <= $max);
}

function in_range($min, $var, $max) {
	return (!is_null($min) ? (settype($min, gettype($var)) && ($min <= $var)) : TRUE) && (!is_null($max) ? (settype($max, gettype($var)) && ($var <= $max)) : TRUE);
}

function in_range_low_high($min, $low_value, $high_value, $max) {
	return in_range($min, $low_value, $high_value) && in_range($low_value, $high_value, $max);
}


function intval_deep($var, $base = 10) {
	return is_array($var) ? array_map('intval_deep', $var, array_fill_values($var, $base)) : intval($var, $base);
}

function doubleval_deep($var) {
	return is_array($var) ? array_map('doubleval_deep', $var) : doubleval($var);
}

function floatval_deep($var) {
	return is_array($var) ? array_map('floatval_deep', $var) : floatval($var);
}

function strval_deep($var) {
	return is_array($var) ? array_map('strval_deep', $var) : strval($var);
}


function boolval_deep($var) {
	return is_array($var) ? array_map('boolval_deep', $var) : boolval($var);
}

function intboolval_deep($var) {
	return is_array($var) ? array_map('intboolval_deep', $var) : intboolval($var);
}

function uintval_deep($var) {
	return is_array($var) ? array_map('uintval_deep', $var) : uintval($var);
}

function ufloatval_deep($var) {
	return is_array($var) ? array_map('ufloatval_deep', $var) : ufloatval($var);
}

function min_max_deep($min, $var, $max) {
	return is_array($var) ? array_map('min_max_deep', array_fill_values($var, $min), $var, array_fill_values($var, $max)) : min_max($min, $var, $max);
}


function sprint_r($expression) {
	return print_r($expression, TRUE);
}

function sprint_l($expression) {
	return implode(CRLF, trim_deep(array_map('sprint_r', (array)$expression)));
}

function print_l($expression, $return = FALSE) {
	if (!$return) echo sprint_l($expression);
	return $return ? sprint_l($expression) : TRUE;
}


?>